package cn.tedu.charging.device.canal;


import cn.tedu.charging.device.dao.repository.StationCacheRepositoryFactory;
import cn.tedu.charging.device.pojo.po.StationCanalPO;
import cn.tedu.charging.device.service.DeviceService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import top.javatool.canal.client.annotation.CanalTable;
import top.javatool.canal.client.handler.EntryHandler;

/**
 * 场站数据库数据和Redis数据 同步处理器
 * 数据库表 charging_station 发生了变化 C create 创建 U update 更新 D delete 删除
 * 要通知 StationSyncHandler 处理器 @CanalTable("charging_station")
 *
 * charging_station 插入了数据 C 通知 StationSyncHandler#insert 方法  在Redis插入数据
 * charging_station 更新了数据 U 通知 StationSyncHandler#update 方法  在Redis更新数据
 * charging_station 删除了数据 D 通知 StationSyncHandler#delete 方法  在Redis删除数据
 *
 */
@Slf4j
@Component
@CanalTable("charging_station")
public class StationSyncHandler implements EntryHandler<StationCanalPO> {

    //@Autowired
    //private StationCacheRepositoryFactory factory;

    @Autowired
    private DeviceService deviceService;

    @Override
    public void insert(StationCanalPO stationCanalPO) {
        //factory.insert();
        deviceService.insert(stationCanalPO);
        log.debug("<<StationSyncHandler>> 收到数据库表 charging_station 发生了插入事件:{}",stationCanalPO);
        EntryHandler.super.insert(stationCanalPO);
    }

    @Override
    public void update(StationCanalPO before, StationCanalPO after) {
        //factory.update();
        deviceService.update(before,after);
        log.debug("<<StationSyncHandler>> " +
                "收到数据库表 charging_station 发生了更新事件,before:{},after:{}",before,after);
        EntryHandler.super.update(before, after);
    }

    @Override
    public void delete(StationCanalPO stationCanalPO) {
        //factory.delete();
        deviceService.delete(stationCanalPO);
        log.debug("<<StationSyncHandler>> 收到数据库表 charging_station 发生了删除事件:{}",stationCanalPO);
        EntryHandler.super.delete(stationCanalPO);
    }
}
